home *** CD-ROM | disk | FTP | other *** search
- movemem:
- ;does the same thing as "rep movsb", only 50% faster.
- ;moves words instead of bytes, and handles the case of both addresses odd
- ;efficiently. There is no way to handle one address odd efficiently.
- ;This routine always aligns the source address in the hopes that the
- ;destination address will also get aligned. This is from Phil Karn's
- ;code from ec.c, a part of his NET package. I bummed a few instructions
- ;out.
- jcxz movemem_cnte ; If zero, we're done already.
- test si,1 ; Does source start on odd byte?
- jz movemem_adre ; Go if not
- movsb ; Yes, move the first byte
- dec cx ; Count that byte
- movemem_adre:
- shr cx,1 ; convert to word count
- rep movsw ; Move the bulk as words
- jnc movemem_cnte ; Go if the count was even
- movsb ; Move leftover last byte
- movemem_cnte:
- ret
-
-
-